perm filename NTBOX.FAI[CMS,LCS]1 blob sn#388569 filedate 1978-10-17 generic text, type T, neo UTF8
00100		TITLE TBOX
00200		.INSERT MAC748.FAI[CMS,LCS]
00300	
00400		CMD ← 1 ↔ N ← 2	↔ T ← 3 ↔ K ← 0
00500		SW0 ← 4	↔ SW1 ← 5 ↔ SW2 ← 6 ↔ SPD ← 7
00600	
00700		XTAL ← =6000000	;In hertz.
00800		BRATE ← =9600	;Baud rate
00900	
01000	TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
01100	
01200		CEW ← 6	;Alfa led chip enables and write port.
01300		JS ← 7	;Joy stick, CU, and led latch port.
01400	
01500		JMP	RST	;RESET VECTOR
01600		0
01700		DISXI		;EXTERNAL INTERRUPT VECTOR
01800		NOP
01900		NOP
02000		NOP
02100		DISTI		;TIMER INT VECTOR
02200		RETR
02300	
02400	RST:	MOVI	377	;SETUP INPUT PORTS
02500		OUTB	;Latch bus output.
02600		OUTP	1	;SPTT switches.
02650		MOVI	77	;P4-7 and SCAN.
02700		OUTP	2
02710	
02720		MOVAX	4	;PBSW low.
02730		MOVAX	5	;PBSW high.
02740	
02750		MOVI	70	;7 & 10.
02760		MOVAX	CEW	;Enable all alfa leds.
02770		ROL	;A0-3 ← 0.
02780		MOVAX	JS	;Clear JS and CU.
02790	
02800		SWAP	;A0-3 ← 7.
02810		ANPA	CEW	;NOT W
02820		CPLA
02830		ORPA	CEW	;W
02840	
02850		MOVI	217	;10 & 17.
02860		ORPA	CEW	;Disable all alfa leds.
02870	
02880		SWAP	;A0-3 ← 10.
02890		ORPA	JS	;NOT CU.
02895		CALL	CALED	;Clear alfa leds.
02897	
02900		CALL	CLED	;Clear leds
03000		CLRA		;Zero A for input byte
03100		MOVAT		;Setup timer
03200		STRTT
03300		JMP	SETFLG
03400	
03500	; Set scan flag and timer
03600	UPFLG:	DJNZ	T,CKIN
03700	SETFLG:	MOVRI	T,3	;4 = 96 ms?
03800		CLRF0		;Set scan flag
     

00100	;INPUT WAIT
00200	   OFFSET ← TBIT/2	;Center delay.
00300	INWAI:	JTF	UPFLG	;CHECK IF TIMER TIME OUT
00400	
00500	CKIN:	JT0H	INWAI	;CHECK FOR START BIT
00600	
00700	MOVRI	N,OFFSET-4	;Center - Itime.
00800	CENTER:	DJNZ	N,CENTER	;Wait for center of bit
00900		JT0H	INWAI	;Check if valid start bit
01000	
01100		MOVRI	CMD,11	;# of bits -1
01200	ILOOP:	CALL	IWAI
01300		DJNZ	CMD,ILOOP
01400	
01500		ROLC		;Shift out stop bit
01600		JCC	GAD	;Check for good stop bit.
01700	
01800		MOVAR	CMD	;Save led command
01900		CALL	CLED	;Clear leds.
01925	
01950	;Update mark.←←
02100			JF0S	OSWTCH	;Check if time to scan.
02200			JMP	SCAN
02300	; Output switches
02400		OSWTCH:	MOVRA	SW0
02500			CALL	OBYTE
02600			MOVRA	SW1
02700			CALL	OBYTE
02800			MOVRA	SW2
02900			CALL	OBYTE
03000	
03900			MOVRA	CMD	;Write leds
04000			RORC		;Get cal led
04100			ANI	7
04200			JZ	GAD+1
04300			OUTB		;Mode led (1-7)
04400		GAD:	CLRA
04500			JCC	INWAI
04600			OUTB		;Write cal led
04700			JMP	INWAI
     

00100	;A/D convert routines.
00200		MOVI	0	;Speed default.
00300		JT1H	SVSPD	;Speed off.
00400	
00500		MOVI	0	;Chanel 0.
00600		OUTB	;Latch bus output.
00700		ORPI	2,14	;ALE & STRT.
00800		ANPI	2,3	;NOT ALE & STRT.
00900	
01000		CALL	CONW	;Convert wait.
01100	
01200		INB	;?
01300	
01320		JNZ	SVSPD
01340		INCA	;Force speed non zero.
01360	
01400	SVSPD:	MOVAR	SPD	;Save speed.
01500	
01520		JINT	GPOTS	;Scan joy stick.
01540	   ;RAM(POTS) ← 0.
01550		JMP	SOUT
01560	
01600	GPOTS:	MOVI	1	;Chanel 1.
01700		OUTB	;Latch bus output.
01800		ORPI	2,10	;ALE
01900		ANPI	2,7	;NOT ALE.
02000	
02100		MOVI	2	;CLR bit.
02200		ORPA	JS	;CLR.
02300		CPLA
02400		ANPA	JS	;NOT CLR.
02500		MOVRI	N,4	;# of pots + switch channel.
02600	
02700	ADLOOP:	ORPI	2,4	;STRT.
02800		ANPI	2,13	;NOT STRT.
02900		CALL	CONW	;Convert wait.
03000		INB	;Read channel.
03100	
03200		MOVAM	N	;Save pot N?
03300	
03400		MOVI	1
03500		ORPA	JS	;CNT
03600		CPLA
03700		ANPA	JS	;NOT CNT.
03800	
03900		DJNZ	N,ADLOOP	;Next channel.
04000	
04100	SOUT:	
     

00100	;Joy stick led output routine.
00200	JSLED:	MOVAR	N	;Save JS led bits.
00300		MOVI	342	;NOT 1 & 2.
00400		ORPA	JS	;CLR
00500		CPLA
00600		ANPA	JS	;NOT CLR
00700		SWAP	;A0-3 ← 1.
00800	CNTIT:	ORPA	JS	;CNT.
00900		CPLA
01000		ANPA	JS	;NOT CNT.
01100	
01200		DJNZ	N,CNTIT
01300	
01400		MOVI	4
01500		ORPA	JS	;Latch leds.
01600		CPLA
01700		ANPA	JS	;NOT LAT.
01800	
01900		RET
     

00100	; Byte input routine
00200	IWAI:	MOVRI	N,TBIT-6
00300	WAI:	DJNZ	N,WAI
00400		CLRC
00500		JT0H	BITON
00600		NOP
00700		RORC
00800		RET
00900	
01000	BITON:	CPLC
01100		RORC
01200		RET
01300	
01400	;Clear leds
01500	CLED:	MOVRI	N,370
01550		MOVRA	N	;Setup regs.
01600		CLRL:	OUTB		;Clear led loop
01700		MOVI	7
01800		ANPA	JS	;NOT E.
01850		CPLA
01875		ORPA	JS	;E
01880		INCR	N	;Next led.
01885		MOVRA	N
01890		JNZ	CLRL
01895	
01900		RET		;Return with BUS ← 377
02000	
02100	; Output Acc. to SI/O line
02200	OBYTE:	MOVRI	K,11	;# of bits -1
02400		CLRC
02600		ROLC		;Start bit
02700	OLOOP:	OUTP	1	;Output bit
02800		RORC
02900		MOVRI	N,TBIT-3	;TBIT - Itime.
03000	
03100	OWAIT:	DJNZ	N,OWAIT
03200		DJNZ	K,OLOOP
03300	
03500		ORPI	1,377	;Stop bit.
03600	
03700		MOVRI	N,TBIT-7	;TBIT - Itime.
03800	SWAIT:	DJNZ	N,SWAIT
03900		NOP
04000		RET
04100	
04200	;Convert wait.
04300	CONW:	MOVRI	K,=22	;?
04400	CONL:	DJNZ	K,CONL
04500		RET
     

00100	;Alfa led output routines.
00110	CALED:	MOVI	0	;Clear string index.
00120	
00200	OALFA:	MOVAR	CMD	;Save string index.
00300		MOVI	376	;NOT CE0.
00400	
00500	CENBL:	MOVRI	N,3	;# of chrs in I.C.-1.
00600		MOVAR	K	;Save CE.
00700		MOVAX	CEW	;NOT CE.
00800	
00900	CHRL:	MOVRA	CMD
01000		MOVP3	;A ← String(chr).
01100		OUTB	;Latch bus output.
01200	
01300		MOVI	367
01400		ANPA	CEW	;NOT W.
01500		CPLA
01600		ORPA	CEW	;W
01700	
01800		INCR	CMD	;CHR ← CHR+1.
01900		DJNZ	N,CHRL
02000	
02100		MOVRA	K
02200		ROL	;Next CE.
02300		JBS	3,CENBL
02400	
02500		ROL	;A ← 17
02600		MOVAX	CEW	;CE
02700	
02800		RET
     

00100	; Bit spreading table
00200		LOC 674		;674 = Start of page one
00300		  0 ↔   1 ↔   4 ↔   5 ↔  20 ↔  21 ↔  24 ↔  25
00400		100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
00500	
00520		SBITS ← 60	;Scan bits.
00540		ROW0 ← 357	;Scan row 0.
00560		ROW1 ← 337	;Scan row 1.
00580	
00600	SCAN:	CPLF0		;Reset scan flag
00700		ORPI	2,SBITS	;Turn off rows
00800		ANPI	2,ROW0	;Enable row 0.
00900		INP	1	;Scan row 0
01000		CPLA
01100		MOVAR	SW0	;Save it
01200		ANI	17	;Get low nibble
01300		MOVPD		;Get bits from spread table
01400		XCHR	SW0
01500		SWAP		;Swap high low nibbles
01600		ANI	17	;Get high nibble 
01700		MOVPD
01800		MOVAR	SW1
01900	
02000		ORPI	2,SBITS	;Turn off row 0.
02100		ANPI	2,ROW1	;Enable row 1.
02200		INP	1	;Scan row 1
02300		ORPI	2,SBITS	;Disable scan.
02400		CPLA
02500		MOVAR	SW2	;Save row 1
02600		ANI	17	;Low nibble
02700		MOVPD
02800		ROL		;Shift + bits
02900		ORR	SW0	;Or into - bits
03000		ANI	374	;Clear teach and off bits.
03100		MOVAR	SW0
03200		MOVRA	SW2	;Get row 1 again
03300		SWAP
03400		ANI	17
03500		MOVPD
03600		ROL
03700		ORR	SW1
03800		MOVAR	SW1
03850	
03900		MOVXA	4	;Get push buttons.
03910		MOVAR	SW2	;Save low nibble.
03920		MOVXA	5
03930		SWAP	;High nibble.
03940		ORR	SW2
03950	
04000		CPLA
04100		MOVAR	SW2
04200		ANI	177	;Zero spare bit
04300		XCHR	SW2
04400		ROLC		;Shift & swap teach & off bits
04500		ROL
04600		ROLC
04700		ANI	3
04800		ORR	SW0
04900		MOVAR	SW0
05000	
05100		JMP	OSWTCH
05200	   LOC 2272
05300		0	;This is for a block of zeros
05400	END